package com.tgh.au.c5;

import java.util.ArrayList;
import java.util.List;

import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.FontMetrics;
import android.view.KeyEvent;

public class TextUtil {
	/** 绘制的x点*/
	int textPosX; 
	/** 绘制的y点*/
	int textPosY;
	/** 绘制宽度*/
	int textWidth;
	/** 绘制高度*/
	int textHeight;
	
	/** 字体高度*/
	int fontHeight;
	
	/** 每一页显示的行数*/
	int pageLineNum;
	/** 背景颜色*/
	int textBGColor;
	/** 字体颜色*/
	int textColor;
	/** Alpha值*/
	int alpha;
	/** 字符串真实的行数*/
	int realLine;
	/** 当前行*/
	int curLine;
	
	/** */
	String text;
	/** */
	List<String> texts;
	/** */
	Paint paint;
	/** */
	int textSize;
	
	public TextUtil() {
		paint=new Paint();
		paint.setAntiAlias(true);
		paint.setFlags(Paint.ANTI_ALIAS_FLAG);
		texts=new ArrayList<String>();
	}
	public TextUtil(String text,int x,int y,
			int w,int h,int bgColor,
			int textColor,int a,int textSize){
		paint=new Paint();
		paint.setAntiAlias(true);
		paint.setFlags(Paint.ANTI_ALIAS_FLAG);
		texts=new ArrayList<String>();
		
		this.text=text;
		textPosX=x;
		textPosY=y;
		textWidth=w;
		textHeight=h;
		
		textBGColor=bgColor;
		this.textColor=textColor;
		alpha=a;
		this.textSize=textSize;
		getTextInfo();
	}
	
	public void initText(String text, int x, int y, 
			int w, int h, int bgcolor, 
			int txetcolor, int a, int textSize){
		curLine=0;
		pageLineNum=0;
		realLine=0;
		this.text=text;
		textPosX=0;
		textPosY=0;
		textWidth=0;
		textHeight=0;
		textBGColor=0;
		this.textColor=0;
		this.textSize=0;
		alpha=0;
		texts.clear();
		
		setText(text);
		setRect(x,y,w,h);
		setBGColor(bgcolor);
		setTextColor(txetcolor);
		setFontSize(textSize);
		setAlpha(a);
		setPaint();
		getTextInfo();
	}
	/**
	 * 得到字符串的信息
	 * 包括：行数、页数等信息
	 * 内部调用
	 */
	private void getTextInfo() {
		char ch;
		int w=0;
		int start=0;
		FontMetrics fm=paint.getFontMetrics();
		fontHeight=(int) (Math.ceil(fm.descent-fm.top)+2);
		pageLineNum=textHeight/fontHeight;
		for (int i = 0; i < text.length(); i++) {
			ch=text.charAt(i);
			float[] widths=new float[1];
			paint.getTextWidths(String.valueOf(ch), widths);
			if (ch=='\n') {
				realLine++;
				texts.add(text.substring(start, i));
				start=i+1;
				w=0;
			} else {
				w+=Math.ceil(widths[0]);
				if (w>textWidth) {
					realLine++;
					texts.add(text.substring(start, i));
					start=i;
					i--;
					w=0;
				} else if(i==text.length()-1){
					realLine++;
					texts.add(text.substring(start, text.length()));
				}
			}
		}
	}
	/**
	 * 设置画笔
	 */
	public void setPaint() {
		paint.setARGB(alpha, 
				Color.red(textColor), 
				Color.green(textColor), 
				Color.blue(textColor));
		paint.setTextSize(textSize);
	}
	/**
	* 设置Alpha值
	* @param a
	*/
	public void setAlpha(int a) {
		alpha=a;
	}
	/**
	 * 设置字体尺寸
	 * @param textSize
	 */
	public void setFontSize(int textSize) {
		this.textSize=textSize;
	}
	/**
	 * 绘制要显示的字符串
	 * @param text
	 */
	public void setText(String text) {
		this.text=text;
	}
	/**
	 * 设置显示文本的区域
	 * @param x
	 * @param y
	 * @param w
	 * @param h
	 */
	public void setRect(int x, int y, int w, int h) {
		textPosX=x;
		textPosY=y;
		textWidth=w;
		textHeight=h;
	}	
	/**
	 * 设置背景颜色
	 * @param bgcolor
	 */
	public void setBGColor(int bgcolor) {
		textBGColor=bgcolor;
	}
	/**
	 * 设置字体颜色
	 */
	public void setTextColor(int textColor) {
		this.textColor=textColor;
	}
	/**
	 * 绘制字符串
	 * @param canvas
	 */
	public void drawText(Canvas canvas) {
		for (int i = curLine,j=0; i < realLine; i++,j++) {
			if (j>pageLineNum) {
				break;
			}
			canvas.drawText(texts.get(i), textPosX, textPosY+fontHeight*j, paint);
		}
	}
	
	public boolean keyDown(int keyCode,KeyEvent event){
		switch (keyCode) {
		case KeyEvent.KEYCODE_DPAD_UP:
			if (curLine>0) {
				curLine--;
			}
			break;

		case KeyEvent.KEYCODE_DPAD_DOWN:
			if (curLine+pageLineNum<realLine-1) {
				curLine++;
			}
			break;
		}
		return true;
	}
}
